/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.input;

import java.util.ArrayList;
import java.util.List;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.impl.AdressePostale;
import fr.generali.accueilclient.client.om.impl.AdressePostaleRetour;
import fr.generali.accueilclient.client.om.impl.AdresseProposition;
import fr.generali.accueilclient.client.om.impl.AdresseRetour;
import fr.generali.refservcommuns.rce.autresreferentiels.normalisation.adresse.retour.DtoAdressePostaleRetour;
import fr.generali.refservcommuns.rce.autresreferentiels.normalisation.adresse.retour.DtoProposition;
import fr.generali.refservcommuns.rce.autresreferentiels.normalisation.adresse.retour.DtoRetour;

/**
 * @author selrhazala
 */
@Component("dtoAdressePostaleRetourToAdressePostaleRetourConverter")
public class DtoAdressePostaleRetourToAdressePostaleRetourConverter implements
                Converter<DtoAdressePostaleRetour, AdressePostaleRetour> {

    /**
     * {@inheritDoc}
     */
    public AdressePostaleRetour convert(DtoAdressePostaleRetour input) {
        AdressePostaleRetour adressePostaleRetour = null;
        if (input != null) {
            adressePostaleRetour = new AdressePostaleRetour();

            AdresseRetour adresseRetour;
            List<AdresseRetour> listAdresseRetour = new ArrayList<AdresseRetour>();
            for (DtoRetour dtoRetour : input.getDtoRetour()) {
                adresseRetour = new AdresseRetour();
                adresseRetour.setCode(dtoRetour.getCode());
                adresseRetour.setLibelle(dtoRetour.getLibelle());

                listAdresseRetour.add(adresseRetour);
            }

            AdressePostale adressePostale = null;
            if (input.getAdresseValide() != null) {
                adressePostale = new AdressePostale();
                adressePostale.setLigne2(input.getAdresseValide().getLigne2());
                adressePostale.setLigne3(input.getAdresseValide().getLigne3());
                adressePostale.setLigne4(input.getAdresseValide().getLigne4());
                adressePostale.setLigne5(input.getAdresseValide().getLigne5());
                adressePostale.setExtensionNumeroRue(input.getAdresseValide().getExtensionNumeroRue());
                adressePostale.setLibelleTypeRue(input.getAdresseValide().getLibelleTypeRue());
                adressePostale.setNomRue(input.getAdresseValide().getNomRue());
                adressePostale.setCodePostal(input.getAdresseValide().getCodePostal());
                adressePostale.setLibelleLocalite(input.getAdresseValide().getLibelleLocalite());
                adressePostale.setCodeIris(input.getAdresseValide().getCodeIris());
                adressePostale.setCodeInsee(input.getAdresseValide().getCodeInsee());
                adressePostale.setNumero(input.getAdresseValide().getNumero());
                adressePostale.setCodeIris(input.getAdresseValide().getCodeIris());
            }

            AdresseProposition adresseProposition;
            List<AdresseProposition> listAdresseProposition = new ArrayList<AdresseProposition>();
            for (DtoProposition dtoProposition : input.getProposition()) {
                adresseProposition = new AdresseProposition();
                adresseProposition.setLibelleLocalite(dtoProposition.getLibelleLocalite().trim());
                adresseProposition.setVoie(dtoProposition.getVoie().trim());

                listAdresseProposition.add(adresseProposition);
            }

            adressePostaleRetour.setAdresseRetour(listAdresseRetour);
            adressePostaleRetour.setAdresseValide(adressePostale);
            adressePostaleRetour.setNombreProposition(input.getNombreProposition());
            adressePostaleRetour.setProposition(listAdresseProposition);
            adressePostaleRetour.setTypeRetour(input.getTypeRetour());
        }

        return adressePostaleRetour;
    }

}
